"""
自动化测试脚本（跳过用户输入）
"""
import sys
from pathlib import Path

project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))

from src.utils.config_manager import get_config
from src.utils.logger import get_logger


def test_all():
    """运行所有测试"""
    print("=" * 60)
    print("AI虚拟主播系统 - 自动化测试")
    print("=" * 60)

    results = []

    # 1. 测试配置
    print("\n" + "=" * 60)
    print("测试配置管理器")
    print("=" * 60)
    try:
        config = get_config()
        print("✓ 配置文件加载成功")
        print(f"  - B站直播间ID: {config.get('bilibili.room_id')}")
        print(f"  - 虚拟主播名字: {config.get('character.name')}")
        print(f"  - DeepSeek模型: {config.get('deepseek.model')}")
        
        if config.validate():
            print("✓ 配置验证通过")
            results.append(("配置管理器", True))
        else:
            print("❌ 配置验证失败")
            results.append(("配置管理器", False))
    except Exception as e:
        print(f"❌ 配置测试失败: {e}")
        results.append(("配置管理器", False))

    # 2. 测试日志
    print("\n" + "=" * 60)
    print("测试日志系统")
    print("=" * 60)
    try:
        logger = get_logger()
        logger.info("这是一条INFO级别日志")
        logger.warning("这是一条WARNING级别日志")
        print("✓ 日志系统工作正常")
        results.append(("日志系统", True))
    except Exception as e:
        print(f"❌ 日志测试失败: {e}")
        results.append(("日志系统", False))

    # 3. 测试AI引擎
    print("\n" + "=" * 60)
    print("测试AI对话引擎")
    print("=" * 60)
    try:
        from src.services.ai_engine import AIDialogueEngine
        
        config = get_config()
        deepseek_config = config.get_deepseek_config()
        
        engine = AIDialogueEngine(
            api_key=deepseek_config['api_key'],
            system_prompt=config.get_system_prompt(),
            max_tokens=50
        )
        
        print("正在调用DeepSeek API...")
        response = engine.generate_reply("你好，请简单介绍一下自己", "测试用户")
        
        print(f"✓ AI回复: {response.text}")
        print(f"  - 情感: {response.emotion.value}")
        results.append(("AI对话引擎", True))
    except Exception as e:
        print(f"❌ AI引擎测试失败: {e}")
        import traceback
        traceback.print_exc()
        results.append(("AI对话引擎", False))

    # 4. 测试TTS
    print("\n" + "=" * 60)
    print("测试TTS语音合成")
    print("=" * 60)
    try:
        from src.services.tts_engine import TTSEngine
        
        config = get_config()
        tts_config = config.get_tts_config()
        
        engine = TTSEngine(
            app_id=tts_config['app_id'],
            api_key=tts_config['api_key'],
            secret_key=tts_config['secret_key'],
            per=tts_config.get('per', 4)
        )
        
        print("正在合成测试语音...")
        audio, lipsync_data = engine.synthesize("大家好，我是AI虚拟主播，很高兴见到你们！")
        
        if audio:
            print(f"✓ 语音合成成功")
            print(f"  - 音频时长: {engine.get_audio_duration(audio):.2f}秒")
            print(f"  - 口型数据帧数: {len(lipsync_data)}")
            results.append(("TTS语音合成", True))
        else:
            print("❌ 语音合成失败")
            results.append(("TTS语音合成", False))
    except Exception as e:
        print(f"❌ TTS测试失败: {e}")
        import traceback
        traceback.print_exc()
        results.append(("TTS语音合成", False))

    # 输出测试结果
    print("\n" + "=" * 60)
    print("测试结果汇总")
    print("=" * 60)
    
    for name, result in results:
        status = "✓ 通过" if result else "❌ 失败"
        print(f"{name}: {status}")
    
    if all(r[1] for r in results):
        print("\n✓ 所有测试通过!系统可以正常启动。")
        print("\n运行以下命令启动系统:")
        print("  python main.py")
        return True
    else:
        print("\n❌ 部分测试失败，请检查配置和API密钥。")
        return False


if __name__ == "__main__":
    success = test_all()
    sys.exit(0 if success else 1)
